/*global pi */

pi.mod.define('pi.math.random', function (pi) {
	"use strict";

	var module = {},
		INT_MAX = 2147483647,
		// 32位整型的最大值
		FLOAT_AM = 1.0 / INT_MAX,
		// 传一个int，返回序列的下一个数
		getNext = function (seed) {
			var k = 0,
				RANDOM_A = 16807,
				RANDOM_Q = 127773,
				RANDOM_R = 2836,
				RANDOM_MASK = 123459876,
				RANDOM_AQR = INT_MAX;
			seed ^= RANDOM_MASK;
			k = seed / RANDOM_Q;
			seed = RANDOM_A * seed - k * RANDOM_AQR;
			if (seed > INT_MAX) {
				seed -= INT_MAX;
			}
			return seed;
		};

	/**
	 * 创建随机数
	 * seed: int, 随机种子
	 * 返回：随机数对象
	 */
	module.create = function (seed) {
		return {
			seed: seed
		};
	};

	/**
	 * 得到一个范围在[min, max]之间的随机int
	 * rand: pi.math.random, 随机种子
	 * min, max: int, min <= max
	 * 返回：int, 随机数
	 */
	module.getInt = function (rand, min, max) {
		if (min === max) {
			return min;
		}
		rand.seed = getNext(rand.seed);
		return min + rand.seed % (max - min + 1);
	};

	/**
	 * 得到一个范围在[min, max]之间的随机float
	 * rand: pi.math.random, 随机种子
	 * min, max: float, min <= max
	 * 返回：float, 随机数
	 */
	module.getFloat = function (rand, min, max) {
		var r;
		if (min === max) {
			return min;
		}

		rand.seed = getNext(rand.seed);
		r = rand.seed * FLOAT_AM;
		return min + r * (max - min);
	};

	return module;
});